package com.dm.filter;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.dm.controller.SysUserController;

public class RequestWrapper  extends HttpServletRequestWrapper{

	 private  String body;
	  
		private static Logger logger = LoggerFactory.getLogger(SysUserController.class);


	    public RequestWrapper(HttpServletRequest request) {
	        super(request);
	        StringBuilder stringBuilder = new StringBuilder();
	        BufferedReader bufferedReader = null;
	        InputStream inputStream = null;
	        try {
	            inputStream = request.getInputStream();
	            if (inputStream != null) {
	                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
	                char[] charBuffer = new char[128];
	                int bytesRead = -1;
	                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
	                    stringBuilder.append(charBuffer, 0, bytesRead);
	                }
	            } else {
	                stringBuilder.append("");
	            }
	        } catch (IOException ex) {

	        } finally {
	            if (inputStream != null) {
	                try {
	                    inputStream.close();
	                }
	                catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	            if (bufferedReader != null) {
	                try {
	                    bufferedReader.close();
	                }
	                catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
	        body = stringBuilder.toString();
	        System.out.println(body);
	    }

	    @Override
	    public ServletInputStream getInputStream() throws IOException {
	        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
	        ServletInputStream servletInputStream = new ServletInputStream() {
	            @Override
	            public boolean isFinished() {
	                return false;
	            }
	            @Override
	            public boolean isReady() {
	                return false;
	            }
	            @Override
	            public void setReadListener(ReadListener readListener) {
	            }
	            @Override
	            public int read() throws IOException {
	                return byteArrayInputStream.read();
	            }
	        };
	        return servletInputStream;

	    }

	    @Override
	    public BufferedReader getReader() throws IOException {
	        return new BufferedReader(new InputStreamReader(this.getInputStream()));
	    }

	    public String getBody() {
	        return this.body;
	    }

}
